<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>96_复制的方式</title>
		<script>
			/* 
			...(三个点，叫展开运算符)
			[...links].includes(event.target) 检查event.target是否在展开的links中
			 */
			const arr = ["孙悟空", "猪八戒", "沙和尚"];
			const arr2 = arr.slice();

			const arr3 = [arr[0], arr[1], arr[2]] //也是一种浅拷贝
			const arr4 = [...arr]; //等于把arr的元素一个个的拆开放到新数组中。和上面的写法等价。

			//展开运算符也可以这样写：
			arr5 = ["猪猪", ...arr, "小和尚"]
			console.log(arr5);

			function sum(a, b, c) {
				return a + b + c;
			}

			const arrNum = [10, 20, 30];
			let ret = sum(...arrNum)
			console.log(ret);

			/* 
			对象的复制（浅拷贝）
				- 0bject.assign(目标对象，被复制的对象)
				-将被复制对象中的属性复制到目标对象里，并将目标对象返回。
				
			-也可以使用展开运算符对对象进行复制
			 */
			const obj = {
				name: "孙悟空",
				age: 18
			}
			//const obj2 = Object.assign({}, obj) //将obj赋值给前面的{}参数。

			//或者这样写
			//const obj2 = {}
			//Object.assign(obj2, obj);

			//或者这样,目标对象不为空
			//const obj2={address:"花果山"}//并不会影响到address属性。
			//Object.assign(obj2, obj);//{address: '花果山', name: '孙悟空', age: 18}

			//或者这样,目标对象中有和被复制对象中相同属性。目标对象中那个相同属性会被覆盖。
			const obj2 = {
				address: "花果山",
				age: 10
			}
			Object.assign(obj2, obj); //{address: '花果山', age: 18, name: '孙悟空'}
			console.log(obj2);

			//const obj3={...obj}// 将obj中的属性在新对象中展开
			const obj3 = {
				address: "高老庄",
				...obj
			}
			console.log("obj3=", obj3); //{address: '高老庄', name: '孙悟空', age: 18}
		</script>
	</head>
	<body>
	</body>
</html>